#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->tech = new Teacher();
    this->stu = new Student();

    // 这种写法是可以的
    connect(tech,SIGNAL(hungry(void)),stu,SLOT(qingke(void)));

    // 以下写法也是可以的
    void (Teacher:: *aaa)(void) = &Teacher::hungry;
    void (Student:: *bbb)(void) = &Student::qingke;
    connect(tech,aaa,stu,bbb);

    // 这种写法，如果是只有唯一的方法可以，如果发现多个重载的方法，就不行
    // connect(tech,&Teacher::hungry,stu,&Student::qingke);

    // 这种写法是可以的
    // void (Teacher:: *aa)(const QString &) = &Teacher::hungry;
    // void (Student:: *bb)(const QString &) = &Student::qingke;
    // connect(tech, aa,stu,bb);

    // 这种写法更加的简单，也是可以的
    connect(tech,SIGNAL(hungry(const QString &)),stu,SLOT(qingke(const QString &)));

    // 信号触发信号
    QPushButton *btn = new QPushButton();
    btn->setParent(this);
    btn->setText("信号触发信号");
    btn->resize(100,35);
    // btn->show();

    // 信号连接信号，触发无参的方法
    connect(btn,&QPushButton::clicked,tech,aaa);

    // 断开信号
    // disconnect(btn,&QPushButton::clicked,tech,aaa);

    // 一个信号可以连接多个槽函数
    // 多个信号可以连接一个槽函数
    // 信号，还可以连接其他信号
    // 信号的参数和槽函数的参数要匹配
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    emit this->tech->hungry();
}


void MainWindow::on_pushButton_2_clicked()
{
    emit this->tech->hungry("小龙虾");
}


void MainWindow::on_pushButton_3_clicked()
{
    emit this->tech->hungry();
}

